<?php
class Application_Model_StorageResources extends Xend_Db_Model {
	protected $_dbTableName = 'Application_Model_Table_StorageResources';
	public function __construct() {
		parent::__construct();
	}

	/**
	 * speichert einen Datensatz vom Typ Application_Model_Schema_StorageResource
	 * @param object Application_Model_Schema_StorageResource
	 * @return int ID des Datensatzes in der Datenbanktabelle storage_resources
	 */
	public function save(Application_Model_Schema_StorageResource $storageResource) {
		$ret	= null;
		$data = array(
			'resources_id'	=> $storageResource->resource->id,
			'cur_value'			=> $storageResource->resource->curValue
		);

		if($storageResource->id === null) {
			$ret = $this->getDbTable()->insert($data);

		} else {
			$ret = $this->getDbTable()->update($data, array('id = ?' => $storageResource->id));
		}

		return (int) $ret;
	}

	/**
	 * fragt eine StorageResource Eintrag ab, der auf die eventuell uebergebenen Bedingungen
	 * zutrifft
	 * @param array $where Array mit Bedingungen, die an die Datenbank uebergeben werden
	 * @param array $ref Array mit Tabellen, die verknuepft werden sollen
	 * @return array Array mit den Daten, die aus der Datenbank geladen wurden
	 */
	public function find($where = array(), $ref = array()) {
		$storageResource = null;

		if(is_array($data = $this->findall($where, $ref, array('limit' => 1)))) {
			$storageResource = current($data);
		}

		return $storageResource;
	}

	/**
	 * fragt alle StorageResource Eintraege, die auf die eventuell uebergebenen Bedingungen
	 * zutreffen, ab
	 * @param array $where Array mit Bedingungen, die an die Datenbank uebergeben werden
	 * @param array $ref Array mit Tabellen, die verknuepft werden sollen
	 * @return array Array mit den Daten, die aus der Datenbank geladen wurden
	 */
	public function findall($where = array(), $ref = array(), $options = array()) {
		$storageResources	= array();
		$ref							= array_flip($ref);
		$select						= $this->_database
			->select()
			->from(
				array('storage_resources'),
        array(
					'storage_resources.id', 'storage_resources.resources_id', 'storage_resources.cur_value'
				)
			);

		// Referenzen
		// -----------------------------------------------------------------------------------
		if(array_key_exists('Resources', $ref)) {
			$select
				->joinLeft('resources', 'storage_resources.resources_id = resources.id', null)
				->columns(array('name', 'max_value'), 'resources');
		}

		// Where
		// -----------------------------------------------------------------------------------
		if(is_array($where) && !empty($where)) {
			foreach($where as $k => $v) {
				$select->where($k, $v);
			}
		}

		// Options
		// -----------------------------------------------------------------------------------
		if(isset($options['limit'])) {
			$select->limit($options['limit'], 0);
		}

		// Datenauswertung
		// -----------------------------------------------------------------------------------
		foreach($this->fetch($select) as $k => $v) {

			// Resource
			// ---------------------------------------------------------------------------------
			$resource	= new Application_Model_Schema_Resource();
			$resource
				->setId($v['storage_resources']['resources_id'])
				->setCurValue($v['storage_resources']['cur_value']);

			if(array_key_exists('Resources', $ref)) {
				$resource
					->setName($v['resources']['name'])
					->setMaxValue($v['resources']['max_value']);
			}

			// TileResource
			// ---------------------------------------------------------------------------------
			$storageResource	= new Application_Model_Schema_StorageResource();
			$storageResource
				->setId($v['storage_resources']['id'])
				->setResource($resource);

			$storageResources[(int) $v['storage_resources']['id']] = $storageResource;
		}

		return $storageResources;
	}
}
?>